import type { SiteConfig } from '@/types/siteConfig';

import { UdpClient } from './UdpClient';

export interface IInteractive {
  start(seq_no: number, siteConfig: SiteConfig): Promise<boolean>;
  stop(siteConfig: SiteConfig): Promise<boolean>;
}

export class Interactive implements IInteractive {
  async start(seq_no: number, siteConfig: SiteConfig): Promise<boolean> {

    try {
      const udpClient = new UdpClient(siteConfig.port, siteConfig.ip_addr); // 使用端口26505和本地主机地址
      await udpClient.playScene(seq_no-1); // 播放场景
      return true;
    } catch (e) {
        console.error('播放失败', e);
        throw new Error('播放失败');
    }
  }

  /**
   * 2.结束播放
   * 命令长度（4字节）	命令3（4字节）
   * 举例：
   * 0X00000008 00000003
   */
  async stop(siteConfig: SiteConfig): Promise<boolean> {
    try {
      // 停止播放场景命令：0X00000008 00000003
      // byte为08 00 00 00  03 00 00 00
      
      const udpClient = new UdpClient(siteConfig.port, siteConfig.ip_addr); // 使用端口26505和本地主机地址
      await udpClient.stopPlaying(); // 结束播放
      return true;
    } catch (e) {
        console.error('结束播放失败', e);
        throw new Error('结束播放失败');
    }
  }
}
